package model;

import java.sql.SQLException;
import java.util.ArrayList;

/**
 * Diese Klasse stellt eine Benutzergruppe dar. (z.B. Administrator, Redakteur)
 * 
 * @author David
 * 
 */
public class Gruppe {
	public static final int ADMIN = 3;
	public static final int REDAKTEUR = 2;
	public static final int DEZERNAT2 = 4;
	public static final int ORDNUNGSEBENENVERANTWORTLICHER = 1;

	private int id;
	private String name;
	private Benutzer[] benutzer;
	private String benutzerIds;

	private BenutzerRepository benutzerRepository;

	/**
	 * Gibt die ID zurück.
	 * 
	 * @return die ID
	 */
	public int getId() {
		return id;
	}

	/**
	 * Setzt die ID.
	 * 
	 * @param id
	 *            die ID
	 */
	public void setId(int id) {
		this.id = id;
	}

	/**
	 * Gibt den Namen zurück.
	 * 
	 * @return der Name
	 */
	public String getName() {
		return name;
	}

	/**
	 * Setzt den Namen.
	 * 
	 * @param name
	 *            der Name
	 */
	public void setName(String name) {
		this.name = name;
	}

	/**
	 * Gibt die Benutzer zurück.
	 * 
	 * @return die Benutzer
	 * @throws SQLException
	 * @throws ClassNotFoundException
	 */
	public Benutzer[] getBenutzer() throws ClassNotFoundException, SQLException {
		if (benutzer == null) {
			if (benutzerRepository == null) {
				benutzerRepository = BenutzerRepository.getInstance();
			}
			if (!benutzerIds.equals("")) {
				String[] temp = benutzerIds.split(";");
				ArrayList<Benutzer> benutzerarray = new ArrayList<Benutzer>();
				for (int i = 0; i < temp.length; i++) {
					if (benutzerRepository.getBenutzerNachId(Integer
							.parseInt(temp[i])) != null) {
						benutzerarray.add(benutzerRepository
								.getBenutzerNachId(Integer.parseInt(temp[i])));
					}
				}
				if (benutzerarray.size() > 0) {
					benutzerarray.trimToSize();
					benutzer = benutzerarray.toArray(new Benutzer[0]);
				} else {
					benutzer = null;
				}
			}
		} else { // Versionen aktualisieren
			if (benutzerRepository == null) {
				benutzerRepository = BenutzerRepository.getInstance();
			}
			ArrayList<Benutzer> benutzerarray = new ArrayList<Benutzer>();
			for (int i = 0; i < benutzer.length; i++) {
				if (benutzerRepository.getBenutzerNachId(benutzer[i].getId()) != null) {
					benutzerarray.add(benutzerRepository
							.getBenutzerNachId(benutzer[i].getId()));
				}
			}
			if (benutzerarray.size() > 0) {
				benutzerarray.trimToSize();
				benutzer = benutzerarray.toArray(new Benutzer[0]);
			} else {
				benutzer = null;
			}
		}
		return benutzer;
	}

	/**
	 * Setzt die Benutzer.
	 * 
	 * @param benutzer
	 *            das Benutzer-Array
	 */
	public void setBenutzer(Benutzer[] benutzer) {
		this.benutzer = benutzer;
	}

	/**
	 * Prüft ob der per ID übergebene Benutzer in der Gruppe ist
	 * 
	 * @param id
	 *            die ID
	 * @return wenn der Benutzer zur Gruppe gehört <code>true</code>, ansonsten
	 *         <code>false</code>
	 * @throws SQLException
	 * @throws ClassNotFoundException
	 */
	public boolean inGruppe(int id) throws ClassNotFoundException, SQLException {
		getBenutzer(); // zum laden
		if (benutzer != null) {
			for (int i = 0; i < benutzer.length; i++) {
				if (benutzer[i].getId() == id) {
					return true;
				}
			}
		}
		return false;
	}

	/**
	 * Setzt Benutzer-IDs
	 * 
	 * @param benutzerIds
	 *            ein String mit Semikolonseparierten IDs
	 */
	public void setBenutzerIds(String benutzerIds) {
		this.benutzerIds = benutzerIds;
	}

}
